package com.yeyks.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;

import javax.validation.Valid;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 *
 */
@Data
@ApiModel(description = "订单head")
public class OrderHeadDTO implements Serializable {
    private static final long serialVersionUID = 4468097492906345791L;

    /**
     * 订单id
     */
    @ApiModelProperty(value = "订单id")
    private Long headId;

    /**
     * 订单号（唯一）
     */
    @ApiModelProperty(value = "订单号（唯一）")
    @NotBlank(message = "订单号不能为空")
    @Size(max = 12, message = "订单号最长12个长度")
    private String orderNo;

    /**
     * 应付金额(减免之前的金额)单位:元
     */
    @ApiModelProperty(value = "应付金额(减免之前的金额)单位:元")
    @DecimalMin("0.00")
    @DecimalMax("999999999.99")
    private BigDecimal orderAmount;

    /**
     * 实付金额（最终付款额）
     */
    @ApiModelProperty(value = "实付金额（最终付款额）")
    @DecimalMin("0.00")
    @DecimalMax("999999999.99")
    private BigDecimal actuallyAmount;

    /**
     * 优惠金额
     */
    @ApiModelProperty(value = "优惠金额")
    @DecimalMin("0.00")
    @DecimalMax("999999999.99")
    private BigDecimal orderDiscounts;

    /**
     * 运费
     */
    @ApiModelProperty(value = "运费")
    @DecimalMin("0.00")
    @DecimalMax("999999999.99")
    private BigDecimal postFee;

    /**
     * 支付类型:online、offline、nopay
     */
    @ApiModelProperty(value = "支付类型:ONLINE、OFFLINE、NOPAY")
    private String paymentType;

    /**
     * 支付通道:weixin、alipay、nopay
     */
    @ApiModelProperty(value = "支付通道:WEIXIN、ALIPAY、NOPAY")
    private String payChannel;

    /**
     * 订单创建时间
     */
    @ApiModelProperty(value = "订单创建时间")
    private Date createTime;

    /**
     * 订单过期时间
     */
    @ApiModelProperty(value = "订单过期时间")
    private Date expireTime;

    /**
     * 付款时间
     */
    @ApiModelProperty(value = "付款时间")
    private Date paymentTime;

    /**
     * 状态：unpay:待付款，paid:已付款，sending:配送中，finish:已完成，expired:已失效，closed:已关闭
     */
    @ApiModelProperty(value = "状态：unpay:待付款，paid:已付款，sending:配送中，finish:已完成，expired:已失效，closed:已关闭")
    private String orderStatus;

    /**
     * 买家用户Code
     */
    @ApiModelProperty(value = "买家用户Code")
    @NotBlank(message = "买家code不能为空")
    private String buyerCode;

    /**
     * 买家留言
     */
    @ApiModelProperty(value = "买家留言")
    @Size(max = 150, message = "买家留言最长150个长度")
    private String buyerMessage;

    /**
     * 订单来源:pc、app、cascades三种中的一种
     */
    @ApiModelProperty(value = "订单来源:pc、app、cascades三种中的一种")
    @NotBlank(message = "订单来源不能为空")
    private String sourceFrom;

    /**
     * 关闭员code
     */
    @ApiModelProperty(value = "关闭员code")
    private String closeOperatorCode;

    /**
     * 订单关闭时间
     */
    @ApiModelProperty(value = "订单关闭时间")
    private Date closeTime;

    /**
     * 关闭原因
     */
    @ApiModelProperty(value = "关闭原因")
    private String closeReason;

    /**
     * 配送员
     */
    @ApiModelProperty(value = "配送员")
    @Size(max = 20, message = "配送员最长20个长度")
    private String deliveryMan;

    /**
     * 送货单号
     */
    @ApiModelProperty(value = "送货单号")
    @Size(max = 50, message = "送货单号最长20个长度")
    private String deliveryCode;

    /**
     * 配送完成时间（点击完成时候录入）
     */
    @ApiModelProperty(value = "配送完成时间（点击完成时候录入）")
    private Date deliveryEndTime;

    /**
     * 收货人
     */
    @ApiModelProperty(value = "收货人")
    @Size(max = 20, message = "收货人最长20个长度")
    private String receiver;

    /**
     * 收货人电话
     */
    @ApiModelProperty(value = "收货人电话")
    @Size(max = 11, message = "收货人电话最长11个长度")
    private String receiverPhone;

    /**
     * 接单员Code
     */
    @ApiModelProperty(value = "接单员Code")
    private String receiveOperatorCode;

    /**
     * 接单时间
     */
    @ApiModelProperty(value = "接单时间")
    private Date receiveTime;

    /**
     * return:退货  exchange:换货
     */
    @ApiModelProperty(value = "return:退货  exchange:换货")
    private String changeType;

    /**
     * 退货/换货原因
     */
    @ApiModelProperty(value = "退货/换货原因")
    @Size(max = 200, message = "退货/换货最长200个长度")
    private String changeReason;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    @Size(max = 150, message = "备注最长150个长度")
    private String remark;



    /**
     * SKU标签(,号分割)(暂未使用)KU标签(,号分割)(暂未使用)
     */
    @ApiModelProperty(value = "SKU标签(,号分割)(暂未使用)")
    private String orderHeadTags;


}
